﻿#pragma once

#define KEY_PRESS(VK) ((GetAsyncKeyState(VK)&0x1) ? 1 : 0)
#define WALL L'□'
#define BODY L'●' 
#define FOOD L'★' 
//蛇的初始位置
#define POS_X 24
#define POS_Y 5

#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include <locale.h>
#include<stdio.h>
#include<stdbool.h>

enum DIRECTION
{
	UP = 1,
	DOWN,
	LEFT,
	RIGHT
};

enum GAME_STATUS
{
	OK,//正常运⾏
	KILL_BY_WALL,//撞墙
	KILL_BY_SELF,//咬到⾃⼰
	END_NOMAL//正常结束
};
typedef struct SnakeNode
{
	int x;
	int y;
	struct SnakeNode* next;
}SnakeNode,*pSnakeNode;

typedef struct Snake
{
	pSnakeNode _pSnake;  //维护蛇的指针
	pSnakeNode _pFood;	//维护食物的指针
	enum DIRECTION _Dir;//蛇头的方向 
	enum GAME_STATUS _status;//当前游戏的状态
	int _Score;	//当前分数
	int _Add; //每个食物的分数 
	int _SleepTime;//每走一步睡眠时间
}Snake,*pSnake;

//设置光标的坐标
void SetPos(int x, int y);
//打印欢迎界面
void Welcome();
//打印地图
void CreatMap();
//初始化蛇
void InitSnake(pSnake ps);
//构建食物
void CreateFood(pSnake ps);
//游戏开始
void Game_Start(pSnake ps);
//游戏运行
void Game_Run(pSnake ps);
//游戏暂停
void pause();
//蛇的移动
void SnakeMove(pSnake ps);
//是食物
void EatFood(pSnake ps,pSnakeNode pnext);
//不是食物
void NoFood(pSnake ps, pSnakeNode pnext);
//撞墙
void KillByWall(pSnake ps);
//撞身体
void KillBySelf(pSnake ps);
//游戏结束
void Game_End(pSnake ps);


